package org.dromara.common.sms.handler;

import cn.hutool.http.HttpStatus;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.sms4j.comm.exception.SmsBlendException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：SMS异常处理器
 */
@Slf4j
@RestControllerAdvice
public class SmsExceptionHandler {

    /**
     * sms异常
     * 处理SmsBlendException异常的方法
     * 当系统发生短信发送相关的异常时，此方法被调用，用于捕获和处理SmsBlendException异常
     * 它记录了发生异常的请求URI和异常信息，并返回一个表示失败的响应对象，包含错误状态码和错误消息
     *
     * @param e 异常对象，表示捕获到的SmsBlendException实例
     * @param request HttpServletRequest对象，用于获取当前请求的URI
     * @return 返回一个R类型对象，携带错误状态码和错误消息，表示短信发送失败
     */
    @ExceptionHandler(SmsBlendException.class)
    public R<Void> handleSmsBlendException(SmsBlendException e, HttpServletRequest request) {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',发生sms短信异常.", requestURI, e);
        return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "短信发送失败，请稍后再试...");
    }

}
